// ********************************************************************	
/*
	Classe definissant un Bateau: Ver 1.0 - Par Bruno Bouchard
*/
// ********************************************************************	


package battleship;

public class Bateau{
	
	protected String nom;
	protected char code;
	protected char code_touche;
	protected int num_tableau;
	protected int longeur;
	protected int etat;
	
	public Bateau(String nom, char code, char code_touche, int num_tableau, int longueur){
            initBateau(nom, code, code_touche, num_tableau,longueur);
        }
        public Bateau(Bateau b){
            if (b == null)
                throw new NullPointerException("Bateau null -_-");

            initBateau(b.getNom(), b.getCode(), b.getCodeTouche(), b.getNumTableau(), b.getLongueur());
        }
        public Bateau(){
            initBateau("sansNom", 'x', 'y', -1, -1);
        }
	
        private void initBateau(String nom, char code, char code_touche, int num_tableau, int longueur){
            	this.nom = nom;
		this.code = code;
		this.code_touche = code_touche;
		this.num_tableau = num_tableau;
		this.longeur = longueur;
		this.etat = longueur;
        }
	public String getNom(){ return nom; }
	public char getCode(){ return code; }
	public char getCodeTouche(){ return code_touche; }
	public int getNumTableau(){ return code; }
	public int getLongueur(){ return longeur; }
	public int getEtat(){ return etat; }
        public void setEtat(int e) { this.etat = e; }

	public void hitShip(){ etat--; }
        public void setBateau(Bateau b){
            if (b == null)
                throw new NullPointerException("Bateau null -_-");

            initBateau(b.getNom(), b.getCode(), b.getCodeTouche(), b.getNumTableau(), b.getLongueur());
            this.etat = b.getEtat();
        }
	
}
/**
 *
 * @author HUBERT Jean-Philippe <jean-philippe.hubert@uqac.ca>
 * UQAC - Université du Québec à Chicoutimi
 *
 */
    class BateauIA extends Bateau{

        private int tourCoule;
        private int tourPTouche;
        private int[] pCoordTouche;

        public BateauIA(Bateau b){
            super(b.getNom(), b.getCode(), b.getCodeTouche(), b.getNumTableau(), b.getLongueur());
            this.tourCoule = 0;
            this.tourPTouche = 0;
            this.pCoordTouche = new int[2];
        }

        public void setPCoordTouche(int x, int y){
            this.pCoordTouche[0] = x;
            this.pCoordTouche[1] = y;
        }

        public int getTourCoule(){
            return this.tourCoule;
        }
        
        @Override
        public void hitShip(){
            if (this.getEtat() == 1){
                this.setEtat(0);
                //this.tourCoule = 1;
            }
        }

        public void MAJTourCoule(){
            if (this.getEtat() == 0)
                this.tourCoule++;
        }
        
        public void MAJTourPTouche(){
            if (this.getEtat() < this.getLongueur() && this.getEtat() >= 0)
                this.tourPTouche++;
        }

        @Override
        public void setBateau(Bateau b){
            if (b == null)
                throw new NullPointerException("Bateau null -_-");

            this.nom = b.getNom();
            this.code = b.getCode();
            this.code_touche = b.getCodeTouche();
            this.num_tableau = b.getNumTableau();
            this.longeur = b.getLongueur();
            this.etat = b.getEtat();
        }

        public int getTourPTouche() {
            return tourPTouche;
        }
        public int[] getPCoordTouche(){
            return pCoordTouche;
        }
    }